package main

import "fmt"

func main() {
	// var (
	// 	a = 5
	// 	b = 2
	// )
	// a++ // 单独的语句 不能放在=右边赋值
	// b--
	// fmt.Println(a)
	// fmt.Println(b)
	// // 关系运算符
	// fmt.Println(a == b) // bool Go语言是强类型 相同变量才能比较
	// fmt.Println(a != b)
	// fmt.Println(a >= b)
	// fmt.Println(a > b)
	// fmt.Println(a <= b)
	// fmt.Println(a < b)
	// 逻辑运算符
	// && 逻辑and 且
	// || 或者
	// ! 逻辑NOT 取反

	// 位运算符: 针对的是二进制数
	// 5 的二进制表示:101
	// 2 的二进制表示: 10

	// // &: 按位与
	// // 参与运算的两位数各对应的二进位相与 (两位均为1 才是1)
	// fmt.Println(5 & 2) // 000
	// // |: 按位或 (两位有一个为1就为1)
	// fmt.Println(5 | 2) // 111  = 7

	// // ^: 参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1.
	// // (两位不一样则为1)(按位异或)
	// fmt.Println(5 ^ 2) // 111  = 7

	// // <<: 将二进制位左移指定位数
	// // 1 << 10   = 十进制 2的10次方
	// fmt.Println(5 << 1)   // 101 => 1010 = 10
	// fmt.Println(1 << 10)  // 10000000000 => 1024
	// fmt.Println(10 << 10) // 100000000000000000000 => 1048576
	// // >>: 将二进制位右移指定的位数
	// fmt.Println(5 >> 2) // 101 => 1 = 1
	// var m = int8(20)    // 二进制的1  只能存8位
	// fmt.Println(m)
	// // fmt.Println(m << 10) // int8 是最大8位 只能存8位
	// fmt.Println(m >> 2) // 20 二进制 = 10100  右移两位 等于 101 = 5

	// 赋值运算符, 用来给变量赋值

	var x int
	x = 10
	x += 1
	x -= 1
	x *= 2 // x = x*2
	x /= 2 // x = x/2

	x <<= 2 // x = x << 2
	x &= 2  // x = x & 2
	x |= 3  // x x | 3
	x ^= 4  // x = x ^ 4
	x >>= 2 // x = x >> 2
	fmt.Println(x)
}
